package com.itheima.service;

import com.alibaba.dubbo.config.annotation.Service;
import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import com.itheima.constant.RedisConst;
import com.itheima.dao.SetmealDao;
import com.itheima.entity.PageResult;
import com.itheima.entity.QueryPageBean;
import com.itheima.pojo.Setmeal;
import org.springframework.beans.factory.annotation.Autowired;
import redis.clients.jedis.JedisPool;

import java.util.List;
import java.util.Map;

@Service
public class SetmealServiceImpl implements SetmealService {

    @Autowired
    SetmealDao setmealDao;

    @Autowired
    JedisPool jedisPool;


    /**
     * 添加套餐
     */
    @Override
    public void add(Integer[] checkgroupIds, Setmeal setmeal) {

        setmealDao.add(setmeal);

        if (setmeal.getId() != null && checkgroupIds != null && checkgroupIds.length > 0) {
            for (Integer checkgroupId : checkgroupIds) {
                setmealDao.set(setmeal.getId(), checkgroupId);
            }
        }

        //执行到此，说明图片的名称已经存储到数据库中了
        /*
         * 参数1： set集合的名称
         * 参数2： 图片的名称
         */
        jedisPool.getResource().sadd(RedisConst.SETMEAL_PIC_DB_RESOURCES, setmeal.getImg());

    }

    /**
     * 分页查询套餐
     */
    @Override
    public PageResult findPage(QueryPageBean queryPageBean) {
        //开始分页
        PageHelper.startPage(queryPageBean.getCurrentPage(), queryPageBean.getPageSize());
        //条件查询套餐
        Page<Setmeal> page = setmealDao.findPage(queryPageBean.getQueryString());
        return new PageResult(page.getTotal(), page);
    }

    /**
     * 移动端查询套餐列表数据
     * Class<T> classOfT
     */
    @Override
    public List<Setmeal> getSetmeal() {
        List<Setmeal> list = null;

        String setmealList = jedisPool.getResource().get("setmealList");
        if (setmealList == null || setmealList.equals("")) {
            list = setmealDao.getSetmeal();
            System.out.println("套餐列表 第一次访问从mysql中获取数据");
            String s = new Gson().toJson(list);
            jedisPool.getResource().set("setmealList", s);
            return list;
        }

        System.out.println("套餐列表 第二次访问从redis中获取数据");
        list = new Gson().fromJson(setmealList, new TypeToken<List<Setmeal>>() {}.getType());

        return list;
    }

    /**
     * 移动端根据套餐ID查询套餐数据
     */
    @Override
    public Setmeal findDetailsById(Integer id) {
        Setmeal setmeal = null;

        String meal = jedisPool.getResource().get("setmeal");
        if (meal == null || meal.equals("")) {
            setmeal = setmealDao.findDetailsById(id);
            System.out.println("套餐详情 第一次访问从mysql中获取数据");
            String s = new Gson().toJson(setmeal);
            jedisPool.getResource().set("setmeal", s);
            return setmeal;
        }

        System.out.println("套餐详情 第二次访问从redis中获取数据");
        setmeal = new Gson().fromJson(meal, Setmeal.class);

        return setmeal;

    }

    /**
     * 移动端根据套餐ID查询套餐数据2
     */
    @Override
    public Setmeal findById(Integer id) {
        return setmealDao.findById(id);
    }

    /**
     * 预约套餐占比
     */
    @Override
    public List<Map<String, Object>> getSetmealReport() {
        return setmealDao.getSetmealReport();
    }

}
